package org.gpp.proj1.particle;

import java.io.File;
import java.io.IOException;

import com.jme.scene.state.ZBufferState;
import com.jme.system.DisplaySystem;
import com.jme.util.LoggingSystem;
import com.jme.util.export.binary.BinaryImporter;
import com.jmex.effects.particles.ParticleGeometry;

/**
 * Factory de part�culas que cria part�culas de v�rios tipos
 * sob demanda dos clientes.
 * 
 * @author Gustavo de Farias
 * @author Paolo Victor, paolovictor@gmail.com
 */
public class ParticleCreator {

	/**
	 * Cria uma part�cula (um TriMesh) de um determinado tipo.
	 * @param type Uma String contendo o tipo da part�cula. O "tipo"
	 * � normalmente o nome de um arquivo de descri��o de part�culas
	 * previamente criado e que consta nos resources do programa.
	 * @return Um gerenciador de part�culas de onde pode ser facilmente
	 * obtida a part�cula de interesse.
	 */
	public static ParticleGeometry createParticle( String file ) {
		assert file != null : "Cannot create particle with null type";
		
		try {
			ParticleGeometry particleNode = (ParticleGeometry) BinaryImporter.getInstance().load( new File(file) );
			
			ZBufferState zbuf = DisplaySystem.getDisplaySystem().getRenderer().createZBufferState();
			zbuf.setWritable(false);
			zbuf.setEnabled(true);
			zbuf.setFunction(ZBufferState.CF_LEQUAL);
			particleNode.setRenderState(zbuf);
			
			particleNode.updateRenderState();
			return particleNode;
			
		} catch (IOException e) {
			LoggingSystem.getLogger().warning( "Can't load particle: " + file );
			LoggingSystem.getLogger().throwing( "ParticleCreator", "createParticle", e );
			e.printStackTrace();
		}
		
		return null;
	}
}